
"""
    5月新增：修改为Allure报告形式
"""
import os
import datetime
import pytest
from pathlib import Path
import shutil


def generate_allure_report(output_dir="report", prefix="report"):
    """
    生成Allure报告
    参数:
        output_dir: 输出目录名
        prefix: 报告文件名前缀
    返回:
        生成的报告文件路径
    """
    # 创建输出目录
    report_dir = Path(output_dir)
    report_dir.mkdir(exist_ok=True)

    # 修改：将allure_results目录放在report目录下
    allure_results_dir = report_dir / "allure_results"  # 修改这行
    allure_results_dir.mkdir(exist_ok=True)

    # 每次执行前清空allure_results目录,避免遗留上一次失败记录
    if allure_results_dir.exists():
        shutil.rmtree(allure_results_dir)
    allure_results_dir.mkdir(exist_ok=True)

    # 执行测试生成Allure结果
    pytest.main([
        f"--alluredir={allure_results_dir}",  # 这里会自动使用新路径
    ])

    # 生成带时间戳的报告目录名
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    report_folder = report_dir / f"{prefix}_{timestamp}"

    # 生成Allure报告
    os.system(f"allure generate {allure_results_dir} -o {report_folder} --clean")

    return str((report_folder / "index.html").absolute())


def cleanup_reports(output_dir="report", prefix="report", keep_days=7):
    """
    清理旧报告文件
    参数:
        output_dir: 报告目录
        prefix: 报告文件名前缀
        keep_days: 保留天数
    """
    now = datetime.datetime.now()
    cutoff = now - datetime.timedelta(days=keep_days)

    report_dir = Path(output_dir)

    # 清理旧报告
    for f in report_dir.glob(f"{prefix}_*"):
        try:
            date_str = f.name.split('_')[1][:8]
            file_date = datetime.datetime.strptime(date_str, "%Y%m%d")
            if file_date < cutoff:
                shutil.rmtree(f)
        except (IndexError, ValueError):
            continue

    # 清理旧的allure_results（可选）
    # allure_results = report_dir / "allure_results"
    # if allure_results.exists():
    #     for item in allure_results.iterdir():
    #         if item.is_dir():
    #             try:
    #                 dir_date = datetime.datetime.fromtimestamp(item.stat().st_mtime)
    #                 if dir_date < cutoff:
    #                     shutil.rmtree(item)
    #             except:
    #                 continue